<html>
  <head>
	  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>i5ting_ztree_toc:node基础_day3</title>
		<link href="toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/css/zTreeStyle/zTreeStyle.css" media="all" rel="stylesheet" type="text/css"/>
	  <style>
		pre {
		    counter-reset: line-numbering;
		    border: solid 1px #d9d9d9;
		    border-radius: 0;
		    background: #fff;
		    padding: 0;
		    line-height: 23px;
		    margin-bottom: 30px;
		    white-space: pre;
		    overflow-x: auto;
		    word-break: inherit;
		    word-wrap: inherit;
		}

		pre a::before {
		  content: counter(line-numbering);
		  counter-increment: line-numbering;
		  padding-right: 1em; /* space after numbers */
		  width: 25px;
		  text-align: right;
		  opacity: 0.7;
		  display: inline-block;
		  color: #aaa;
		  background: #eee;
		  margin-right: 16px;
		  padding: 2px 10px;
		  font-size: 13px;
		  -webkit-touch-callout: none;
		  -webkit-user-select: none;
		  -khtml-user-select: none;
		  -moz-user-select: none;
		  -ms-user-select: none;
		  user-select: none;
		}

		pre a:first-of-type::before {
		  padding-top: 10px;
		}

		pre a:last-of-type::before {
		  padding-bottom: 10px;
		}

		pre a:only-of-type::before {
		  padding: 10px;
		}

		.highlight { background-color: #ffffcc } /* RIGHT */
		</style>
  </head>
  <body>
	  <div>
				<div style='width:25%;'>
						<ul id="tree" class="ztree" style='width:100%'>

						</ul>
				</div>
        <div id='readme' style='width:70%;margin-left:20%;'>
          	<article class='markdown-body'>
            	<h1 id="node-js-day3">Node.js - day3</h1>
<h2 id="0-">0. 今天主要学习目标</h2>
<ol>
<li>掌握nodemon工具的使用</li>
<li>掌握express框架的基本用法</li>
<li>了解express框架提供的中间件的概念</li>
<li>能够连接并操作数据库</li>
<li>了解模块加载机制</li>
</ol>
<h2 id="1-nodemon-web-">1. 使用 <code>nodemon</code> 工具来自动重启web服务器</h2>
<ul>
<li><p><strong>nodemon的作用</strong>：能够<strong>实时监听</strong>当前项目中，文件的变化；只要监听到了文件的变化，则 nodemon 工具，会自动重新启动 web 服务器，从而使最新的代码生效；免去了程序员手动重启服务器的困扰；</p>
</li>
<li><p><strong>如何安装：</strong>运行 <code>npm i nodemon -g</code>  全局安装即可；</p>
</li>
<li><p><strong>如何使用：</strong></p>
<ul>
<li>之前使用 <code>node 要执行的文件路径</code> 来运行 Node.js 代码；</li>
<li>现在使用 <code>nodemon 要执行的文件路径</code> 来运行 Node.js 代码；</li>
</ul>
</li>
<li><p><strong>注意：</strong>今后在开发Web项目的时候，推荐使用 <code>nodemon</code> 来启动 web 服务器</p>
<pre><code>比如安装nodemon后启动如下：nodemon  app.js
</code></pre></li>
</ul>
<h2 id="2-node-web-express">2. Node 中开发web项目的框架 - express</h2>
<blockquote>
<p>定义（什么是Express）：一个快速的网站开发框架，封装了原生的http模块，用起来更方便；API更人性化</p>
</blockquote>
<h3 id="2-1-express-">2.1 express 框架的特点</h3>
<ol>
<li>基于Node.js平台之上，进一步封装了 <code>http</code> 模块，从而提供了更好用，更友好的 API</li>
<li>使用Express创建网站，比使用原生的http模块更加方便；</li>
<li>Express 并没有覆盖 原生 http 模块中的方法，而是基于 原生方法之上，做了更友好的封装，让用户体验更好</li>
</ol>
<h3 id="2-2-express-">2.2 express 框架的安装和基本使用</h3>
<ol>
<li><strong>安装：</strong>运行 <code>npm i express -S</code> 即可安装</li>
<li><p><strong>创建基本的 <code>express</code> 服务器：</strong></p>
<ul>
<li><p>导入 <code>express</code> 第三方模块；</p>
</li>
<li><p><strong>创建服务器的实例：</strong>调用 <code>const app = express()</code> 方法；</p>
</li>
<li><p>通过 <code>app.get()</code> 或 <code>app.post()</code> 方法，来监听客户端的 <code>get</code> 或 <code>post</code> 请求，具体语法：</p>
<ul>
<li><strong>监听 <code>GET</code> 请求：</strong><code>app.get(&#39;请求地址&#39;, (req, res) =&gt; { 处理函数 })</code> </li>
<li><strong>监听 <code>POST</code> 请求：</strong> <code>app.post(&#39;请求地址&#39;, (req, res) =&gt; { 处理函数 })</code> </li>
</ul>
</li>
<li><p><strong>启动 express 服务器：</strong>通过 <code>app.listen(端口, IP地址, 启动成功后的回调函数)</code> 启动服务器；</p>
<pre><code>const  express=require(&quot;express&quot;);
const  path=require(&quot;path&quot;);
const app=express();

app.get(&quot;/&quot;,(req,res)=&gt;{
    // res.end(&quot;111111&quot;)
    //res.send([1,2,3]);
    //res.sendFile(path.join(__dirname,&quot;./app.html&quot;));
    res.sendFile(&quot;./app.html&quot;,{root:__dirname})
});
app.get(&quot;/movie&quot;,(req,res)=&gt;{
    // res.end(&quot;111111&quot;)
    //res.send([1,2,3]);
    //res.sendFile(path.join(__dirname,&quot;./app.html&quot;));
    res.sendFile(&quot;./views/movie.html&quot;,{root:__dirname})
});
app.get(&quot;/about&quot;,(req,res)=&gt;{
    // res.end(&quot;111111&quot;)
    //res.send([1,2,3]);
    //res.sendFile(path.join(__dirname,&quot;./app.html&quot;));
    res.sendFile(&quot;./views/about.html&quot;,{root:__dirname})
});
app.listen(1000,()=&gt;{
    console.log(&#39;server running at http://127.0.0.1:1000&#39;) 
})
</code></pre></li>
</ul>
</li>
</ol>
<h3 id="2-3-express-">2.3 express 中的快捷方法</h3>
<ol>
<li><code>res.send()</code><ol>
<li>支持 发送 字符串 <code>Content-Type: text/html;</code></li>
<li>支持 发送 对象 或 数组 <code>Content-Type: application/json</code></li>
<li>支持 发送 Buffer 此时会当作文件下载；</li>
</ol>
</li>
<li><code>res.sendFile()</code><ul>
<li>用法1：<code>res.sendFile(path.join(__dirname, &#39;./view/index.html&#39;))</code></li>
<li>用法2：<code>res.sendFile(&#39;./view/movie.html&#39;, { root: __dirname })</code></li>
<li>注意：<code>res.sendFile()</code> 可以向浏览器发送 静态页面；</li>
</ul>
</li>
</ol>
<h3 id="2-4-express-static-">2.4 使用 <code>express.static()</code> 快速托管静态资源</h3>
<blockquote>
<p> 如果我们网站中，有很多静态资源需要被外界访问，此时，使用 res.sendFile 就有点力不从心了;</p>
<p> 这时候，express 框架，为我们提供了 <code>express.static(&#39;静态资源目录&#39;)</code> </p>
<p> 来快速托管指定目录下的所有静态资源文件；</p>
</blockquote>
<ol>
<li><strong>语法1：</strong> <code>app.use(express.static(&#39;public&#39;));</code><ul>
<li><code>app.use()</code>方法，是专门用来注册 中间件；</li>
<li><code>express.static</code> 是express的内置中间件；</li>
</ul>
</li>
<li><strong>语法2：</strong><code>app.use(&#39;/虚拟目录&#39;, express.static(&#39;public&#39;))</code></li>
</ol>
<p>=======相当于: 把public使用虚拟目录替换</p>
<pre><code>const  express=require(&quot;express&quot;);
const  path=require(&quot;path&quot;);
const app=express();

app.use(&quot;/aa&quot;,express.static(&quot;./views&quot;));

app.listen(1000,()=&gt;{
    console.log(&#39;server running at http://127.0.0.1:1000&#39;) 
})

</code></pre><h3 id="2-5-express-">2.5 为 express 框架配置模板引擎渲染动态页面</h3>
<ol>
<li><p>安装 ejs 模板引擎<code>npm i ejs -S</code></p>
</li>
<li><p>使用 app.set() 配置默认的模板引擎 <code>app.set(&#39;view engine&#39;, &#39;ejs&#39;)</code></p>
</li>
<li><p>使用 app.set() 配置默认模板页面的存放路径 <code>app.set(&#39;views&#39;, &#39;./views&#39;)</code></p>
</li>
<li><p>使用 res.render() 来渲染模板页面<code>res.render(&#39;index.ejs&#39;, { 要渲染的数据对象 })</code>，注意，模板页面的 后缀名，可以省略不写！</p>
<pre><code>const express=require(&quot;express&quot;);
const  app=express();

app.set(&quot;view engine&quot;,&quot;ejs&quot;);
app.set(&quot;views&quot;,&quot;./page_ejs&quot;)
app.get(&quot;/&quot;,(req,res)=&gt;{
    res.render(&quot;movie&quot;,{name:&quot;zs&quot;,age:12});
})
app.listen(1300,()=&gt;{
     console.log(&#39;server running at http://127.0.0.1:1300&#39;) 
})
</code></pre></li>
</ol>
<h3 id="2-6-express-art-template">2.6 在 express 中配置 art-template</h3>
<ol>
<li><p>安装 两个包 <code>cnpm i art-template express-art-template -S</code></p>
</li>
<li><p>自定义一个模板引擎  <code>app.engine(&#39;自定义模板引擎的名称&#39;, 渲染函数)</code></p>
</li>
<li><p>将自定义的模板引擎，配置为 express 的默认模板引擎  <code>app.set(&#39;view engine&#39;, &#39;具体模板引擎的名称&#39;)</code></p>
</li>
<li><p>配置 模板页面得存放路径 <code>app.set(&#39;views&#39;, &#39;路径&#39;)</code></p>
<p>==使用express-art-template即可使用原生语法也可以使用简洁语法  即 &lt;%%&gt;  ||  {{}}</p>
<p>1、模板后缀为.ejs</p>
<pre><code>const express=require(&quot;express&quot;);
const  app=express();

app.engine(&quot;ejs&quot;,require(&quot;express-art-template&quot;));
app.set(&quot;view  engine&quot;,&quot;ejs&quot;);
app.set(&quot;views&quot;,&quot;./page_ejs&quot;);

app.get(&quot;/&quot;,(req,res)=&gt;{
    res.render(&quot;movie.ejs&quot;,{name:&quot;zs&quot;,age:12});
});
app.listen(1300,()=&gt;{
     console.log(&#39;server running at http://127.0.0.1:1300&#39;) 
});
</code></pre><pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;ie=edge&quot;&gt;
    &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    movie222222
    姓名---：&lt;%=name%&gt;----年龄--：&lt;%=age%&gt;
    姓名---：{{name}}----年龄--：{{age}}
&lt;/body&gt;
&lt;/html&gt;
</code></pre><p>2、模板后缀为.html</p>
<pre><code>const express=require(&quot;express&quot;);
const  app=express();

app.engine(&quot;html&quot;,require(&quot;express-art-template&quot;));
app.set(&quot;view  engine&quot;,&quot;html&quot;);
app.set(&quot;views&quot;,&quot;./page_ejs&quot;);

app.get(&quot;/&quot;,(req,res)=&gt;{
    res.render(&quot;movie.html&quot;,{name:&quot;zs&quot;,age:12});
});
app.listen(1300,()=&gt;{
     console.log(&#39;server running at http://127.0.0.1:1300&#39;) 
});
</code></pre><p>​</p>
</li>
</ol>
<h2 id="3-express-">3. 使用 express 框架中提供的路由来分发请求</h2>
<ol>
<li><strong>什么是路由：</strong>路由就是对应关系；</li>
<li><strong>什么叫做后端路由：</strong>前端请求的URL地址，都要对应一个后端的处理函数，那么 这种URL地址到 处理函数之间的对应关系，就叫做后端路由；</li>
<li>在Express中，<strong>路由的主要职责</strong> 就是 <strong>把请求分发到对应的处理函数中</strong>；</li>
<li>在Express中，如何 定义并使用路由呢？</li>
</ol>
<pre><code class="lang-js">router.js：  
// 1. 封装单独的 router.js 路由模块文件
  const express = require(&#39;express&#39;)
  // 创建路由对象
  const router = express.Router()
  router.get(&#39;/&#39;, (req, res)=&gt;{})
  router.get(&#39;/movie&#39;, (req, res)=&gt;{})
  router.get(&#39;/about&#39;, (req, res)=&gt;{})
  // 导出路由对象
  module.exports = router

=============================================================

    服务端：
const  express=require(&quot;express&quot;);
const  app=express();

const  router=require(&quot;./router.js&quot;);
app.use(router);
app.listen(1400,()=&gt;{
     console.log(&#39;server running at http://127.0.0.1:1400&#39;) ;
});
</code></pre>
<ol start="5">
<li>express 创建的 app 服务器，如何使用 路由模块呢？</li>
</ol>
<pre><code class="lang-js">  // 导入自己的路由模块
  const router = require(&#39;./router.js&#39;)
  // 使用 app.use() 来注册路由
  app.use(router)
</code></pre>
<h2 id="4-express-">4. Express 框架里 中间件的概念</h2>
<h3 id="4-1-">4.1 什么是中间件</h3>
<blockquote>
<p>定义：中间件就是一个处理函数；只不过这个函数比较特殊，包含了三个参数，分别是 <code>req</code>，<code>res</code>，<code>next</code></p>
<p>注意：中间件方法中的三个参数：</p>
<ul>
<li><p>req：请求对象；</p>
</li>
<li><p>res：响应对象；</p>
</li>
<li><p>next：next()可以被调用，表示调用下一个中间件方法；</p>
<pre><code>app.use((req,res,next)=&gt;{
    let  str=&quot;&quot;;
    req.on(&quot;data&quot;,(data)=&gt;{
        str+=data;
    });
    req.on(&quot;end&quot;,()=&gt;{
        //console.log(str);
        console.log(querystring.parse(str));
        req.body=querystring.parse(str);
        next();
    })
});
</code></pre></li>
</ul>
</blockquote>
<h3 id="4-2-express-5-">4.2 Express 框架中对中间件的5种分类</h3>
<ol>
<li><strong>应用级别的中间件：</strong> 挂载到 app 上的中间件 <code>app.get(&#39;URL地址&#39;, （req, res, next）=&gt; {})</code>；</li>
<li><strong>路由级别的中间件：</strong> 挂载到 router 对象上的中间件  <code>router.get(&#39;url地址&#39;, (req, res, next)=&gt;{})</code></li>
<li><strong>错误级别的中间件：</strong> 回调函数中，有四个参数 <code>app.use((err, req, res, next)=&gt;{})</code></li>
<li><strong>唯一内置的中间件：</strong> <code>express.static()</code></li>
<li><strong>第三方中间件：</strong> 非express框架提供的，需要程序员手动安装才能使用的中间件；<code>body-parser</code> 解析post 表单数据</li>
</ol>
<blockquote>
<p>中间件的概念，了解即可，因为实际开发中，我们都直接使用第三方现成的中间件；</p>
</blockquote>
<h3 id="4-3-">4.3 自己模拟一个解析表单数据的中间件</h3>
<p><a href="http://nodejs.cn/api/querystring.html">http://nodejs.cn/api/querystring.html</a></p>
<pre><code>服务器端： 
const  express=require(&quot;express&quot;);
const  app=express();
const querystring = require(&#39;querystring&#39;);
app.use((req,res,next)=&gt;{
    let  str=&quot;&quot;;
    req.on(&quot;data&quot;,(data)=&gt;{
        str+=data;
    });
    req.on(&quot;end&quot;,()=&gt;{
        //console.log(str);
        console.log(querystring.parse(str));
        req.body=querystring.parse(str);
        next();
    })
});
app.get(&quot;/&quot;,(req,res)=&gt;{
    res.sendFile(&quot;./views/index.html&quot;,{root:__dirname});
});
app.post(&quot;/query&quot;,(req,res)=&gt;{
    res.send(req.body);
});
app.listen(1500,()=&gt;{
     console.log(&#39;server running at http://127.0.0.1:1500&#39;) ;
});
</code></pre><pre><code>客户端：
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;ie=edge&quot;&gt;
    &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form action=&quot;/query&quot; method=&quot;POST&quot;&gt;
        账号：&lt;input type=&quot;text&quot; name=&quot;user&quot;&gt;
        密码：&lt;input type=&quot;password&quot; name=&quot;password&quot;&gt;
        &lt;input type=&quot;submit&quot; value=&quot;提交&quot;&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre><pre><code>data:属于数据流事件，只要有数据传输这个事件就会触发
end：数据传输结束这个事件就会触发
querystring.parse(str)===将数据转换成对象即键值对类型，
req.body===将数据挂载即可在别的事件中使用
</code></pre><h2 id="5-express-">5. Express 中进行数据库操作</h2>
<h3 id="5-1-mysql-">5.1配置 MySql 数据库环境</h3>
<p>user表：</p>
<p><img src="./sql.png"></p>
<h3 id="5-2mysql-">5.2mysql 第三方模块的介绍和基本配置</h3>
<pre><code>1、搭建express服务器
2、安装mysql模块
3、导入mysql模板
4、创建数据库连接池
5、编写sql语句
6、执行sql语句

const express=require(&quot;express&quot;);
const app=express();
const mysql=require(&quot;mysql&quot;);
const conn=mysql.createConnection({
    host:&quot;127.0.0.1&quot;,
    user:&quot;root&quot;,
    password:&quot;root&quot;,
    database:&quot;node_001&quot;
});

/* 新增 */
const  obj={name:&quot;张三&quot;,age:12,gender:1};
const  sql=&quot;insert  into  user  set ?&quot;;
conn.query(sql,obj,(err,result)=&gt;{
  if(err) return  console.log(&quot;插入数据库失败&quot;+err.message);
  console.log(result);
});

/* 修改 */
const  obj={id:3,name:&quot;张三22&quot;,age:12,gender:1};
const  sql=&quot;update  user set ? where  id=?&quot;;
conn.query(sql,[obj,obj.id],(err,result)=&gt;{
    if(err) return  console.log(&quot;插入数据库失败&quot;+err.message);
    console.log(result);
});

/* 删除 */
const  obj={id:6,name:&quot;张三22&quot;,age:12,gender:1};
const  sql=&quot;delete from  user  where  id=?&quot;;
conn.query(sql,[obj.id],(err,result)=&gt;{
    if(err) return  console.log(&quot;删除数据库失败&quot;+err.message);
    console.log(result);
});
或者：
const  sql=&quot;delete from  user  where  id=?&quot;;
conn.query(sql,8,(err,result)=&gt;{
    if(err) return  console.log(&quot;修改数据库失败&quot;+err.message);
    console.log(result);
});


app.listen(1600,()=&gt;{
    console.log(&#39;server running at http://127.0.0.1:1600&#39;); 
});
</code></pre><h3 id="5-3-mysql-crud">5.3使用 mysql 第三方模块实现 CRUD</h3>
<h2 id="6-">6. 模块加载机制</h2>
<h3 id="-">优先从缓存中加载</h3>
<ul>
<li><p>当一个模块初次被 <code>require</code> 的时候，会执行模块中的代码，当第二次加载相同模块的时候，会优先从缓存中查找，看有没有这样的一个模块！</p>
<p>========引入多次只会加载一次。</p>
</li>
<li><p>好处：提高模块的加载速度；不需要每次都重新执行并加载模块！</p>
</li>
</ul>
<h3 id="-">核心模块的加载机制</h3>
<ul>
<li>先查找缓存；如果缓存中没有，再去加载核心模块；</li>
<li>核心模块比如有：fs,path模块</li>
</ul>
<h3 id="-">用户模块的加载机制</h3>
<ul>
<li><p>先查找缓存；</p>
</li>
<li><p>如果缓存中没有则尝试加载用户模块；</p>
</li>
<li><p>如果在加载用户模块时候省略了后缀名，则：</p>
<pre><code>首先，严格按照指定的名称去查找
其次，尝试加载后缀名是 .js 的文件
如果没有.js的文件，则尝试加载 .json 结尾的文件
如果没有 .json 的文件，则尝试加载 .node 结尾的文件
查找规则：index  -&gt;  index.js   -&gt;   index.json   -&gt;  index.node
</code></pre></li>
</ul>
<h3 id="-">第三方模块的加载机制【了解】</h3>
<ol>
<li>先在项目根目录中查找<code>node_modules</code>文件夹</li>
<li>在<code>node_modules</code>文件夹下，查找模块相关的文件夹</li>
<li>在对应的文件夹下，查找<code>package.json</code>的文件</li>
<li>查找<code>package.json</code>文件中的<code>main</code>属性（指定了模块的入口文件）</li>
<li>如果找到了<code>main</code>属性，同时，<code>main</code>属性指定的文件路径存在，那么尝试加载指定的文件模块</li>
<li>加入没有<code>main</code>属性，或者<code>main</code>属性对应的文件不存在，或者没有<code>package.json</code>,那么会依次尝试加载<code>index.js</code>，<code>index.json</code>,<code>index.node</code>;</li>
<li>如果没有<code>index</code>相关的文件，或者没有指定模块对应文件夹，或者，当前项目根目录中没有<code>node_modules</code>文件夹，则向上一层目录中查找<code>node_modules</code>，查找规则同上！</li>
<li>最后，如果在项目所在磁盘的盘符根目录中，还找不到对应模块，则报错：<code>cannot find module ***</code></li>
</ol>
<h2 id="7-">7. 作业</h2>
<ol>
<li>自己使用 <code>express.static</code> 把 今天 <code>资料</code>文件夹下，<code>vue-cms</code> 项目，托管成静态资源服务器；</li>
<li>自己在 <code>express</code> 中，配置和使用 <code>ejs/art-template</code> 来渲染一个动态页面；</li>
<li>创建三个静态页面 <code>index.html</code>， <code>movie.html</code>， <code>about.html</code>；分别使用三种方式，显示这三个静态页面；<ul>
<li>直接 把 路由 挂载到 <code>app</code> 上；</li>
<li>把 路由 抽离为 单独的路由模块，然后把路由，挂载到 <code>router</code> 上；</li>
<li>从 <code>router.js</code> 模块中，再抽离出 一个  <code>handler.js</code> 模块；</li>
</ul>
</li>
</ol>
<h2 id="-">相关文章</h2>
<p><a href="https://aui.github.io/art-template/zh-cn/docs/index.html">art-template 官方文档</a></p>

          	</article>
        </div>
		</div>
  </body>
</html>
<script type="text/javascript" src="toc/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="toc/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript" src="toc/js/ztree_toc.js"></script>
<script type="text/javascript" src="toc_conf.js"></script>

<SCRIPT type="text/javascript" >
<!--
$(document).ready(function(){
    var css_conf = eval(markdown_panel_style);
    $('#readme').css(css_conf)
    
    var conf = eval(jquery_ztree_toc_opts);
		$('#tree').ztree_toc(conf);
});
//-->
</SCRIPT>